package server

//获取一个查询结果, 结果为[]map[string]interface{} ,可json化
//func SelectResultFromRows(rows *sqlx.Rows) ([]map[string]interface{}, error) {
//	result := make([]map[string]interface{}, 0)
//	index := 0
//	for rows.Next() {
//		index++
//		row_map := make(map[string]interface{})
//		err := rows.MapScan(row_map)
//		if err != nil {
//			return nil, errors.New(fmt.Sprintf("SelectResultFromRows row(%d): %s", index, err.Error()))
//		}
//
//		//转化字段类型，便于转化为json
//		for col, val := range row_map {
//			bytesArr, ok := val.([]byte)
//			if ok {
//				row_map[col] = string(bytesArr)
//			}
//		}
//		result = append(result, row_map)
//	}
//	return result, nil
//}

//获取多个查询结果，输出结果数组，数组中的每个元素代表一个查询结果([]map[string]interface{}), 可json化。
//func SelectMultiResultFromRows(rows *sqlx.Rows) ([][]map[string]interface{}, error) {
//	multiResult := make([][]map[string]interface{}, 0)
//
//	index := 1
//	result, err := SelectResultFromRows(rows)
//	if err != nil {
//		return nil, errors.New(fmt.Sprintf("SelectMultiResultFromRows set(%d): %s", index, err.Error()))
//	}
//	multiResult = append(multiResult, result)
//
//	for rows.NextResultSet() {
//		index++
//		result, err := SelectResultFromRows(rows)
//		if err != nil {
//			return nil, errors.New(fmt.Sprintf("SelectMultiResultFromRows set(%d): %s", index, err.Error()))
//		}
//		multiResult = append(multiResult, result)
//	}
//
//	return multiResult, nil
//}

//设置家族排序
//func set_family_order(tx *sql.Tx, person_id int64, jsonData string) *ReturnStruct {
//	type Families struct {
//		ids []int64 `json:"family_ids"`
//	}
//	var input Families
//	err := json.Unmarshal([]byte(jsonData), &input)
//	if err != nil {
//		return FailRet(CodeParamError, err)
//	}
//	if len(input.ids) == 0 {
//		return SvrErrReturn("排序参数为空")
//	}
//
//	var count int
//	err = tx.QueryRow("select count(*) from tb_family a join tb_family_member b on a.id = b.family_id where b.person_id = ? and b.family_id in (?)", person_id, strings.Join(ArrInt64ToArrStr(input.ids), ",")).Scan(&count)
//	if err != nil {
//		return DBErrReturn("排查参数有效性错误", err)
//	}
//	if count != len(input.ids) {
//		return ParamErrReturn("参数ids中不是所有都是有效的！")
//	}
//
//	rows, err := tx.Query("select a.id from tb_family a join tb_family_member b on a.id = b.family_id where b.person_id = ? order by b.priority desc", person_id)
//	if err != nil {
//		return DBErrReturn("更新家族排序-搜索家族失败", err)
//	}
//	datas, _ := SelectResultFromRows(rows)
//	exists_ids := make([]int64, 0) //现在的所有family_id,按照权重由大到小排列。
//	for i := 0; i < len(datas); i++ {
//		id, _ := datas[i]["id"].(int64)
//		exists_ids = append(exists_ids, id)
//	}
//	if len(exists_ids) < len(input.ids) {
//		return SvrErrReturn("更新家族排序-搜索家族id内部错误")
//	}
//
//	//根据输入的顺序调整(容许输入的顺序为子集)
//	input_ids_map := make(map[int64]uint8) //提高查询效率
//	for i := 0; i < len(input.ids); i++ {
//		input_ids_map[input.ids[i]] = 1
//	}
//	new_ids := make([]int64, 0) //重新排序后的结果
//	for i := 0; i < len(exists_ids); i++ {
//		_, ok := input_ids_map[exists_ids[i]]
//		if ok {
//			new_ids = append(new_ids, 0)
//		} else {
//			new_ids = append(new_ids, exists_ids[i])
//		}
//	}
//
//	var curr_index int = 0
//	for i := 0; i < len(new_ids); i++ {
//		if new_ids[i] == 0 {
//			if curr_index >= len(input.ids) {
//				return SvrErrReturn("家族id排序异常！")
//			}
//			new_ids[i] = input.ids[curr_index]
//			curr_index++
//		}
//	}
//	//排序完毕，新的顺序在new_ids中
//	new_ids_len := len(new_ids)
//	for i := 0; i < new_ids_len; i++ {
//		tx.Exec("update tb_family_member set priority = ? where family_id = ? and person_id = ?", new_ids_len-i, new_ids[i], person_id)
//	}
//
//	//查询所属的所有家族，按权重从大到小排列。
//	rows, err = tx.Query("select a.family_id, b.name as family_name from tb_family_member a join tb_family b on a.family_id = b.id where a.person_id = ? order by a.priority desc", person_id)
//	if err != nil {
//		return DBErrReturn("更新家族排序-查询家族失败", err)
//	}
//	family_data, _ := SelectResultFromRows(rows)
//	return SuccRet(family_data)
//}
